In modern computing, software wizards are used to execute complex tasks that a user would otherwise need to carry out manually. For example, a software wizard is commonly used to perform an installation of a software package, which typically comprises a multitude of steps that would be tedious for the user to perform manually. A typical software wizard guides a user through a series of user interface (UI) pages that contain UI input elements through which the user makes decisions about how the complex task should be carried out. When the user has navigated through all of the UI pages, the software wizard executes the complex task in accordance with all of the inputs that the user has made.
Despite the prevalence of software wizards, the framework for developing and testing software wizards remains somewhat primitive. Many of the current techniques for developing and testing software wizards are still ad-hoc, and as a result, the process is very time-consuming. Software wizards that are developed and tested ad-hoc are also inflexible and vulnerable to errors resulting from an incomplete design.
It may be possible to address some of the issues with ad-hoc development and testing of software wizards by applying popular software paradigms, such as the model view controller (MVC) paradigm. Techniques employing MVC, however, are still flawed, because in MVC based approaches, there is not a natural way of modeling a fundamental behavior of software wizards—which is that most UI pages included in software wizards conceptually follow after another page. Moreover, explicit ordering for validation cannot be defined using MVC based approaches, which makes such approaches susceptible to the same problems as the ad-hoc techniques described above.